#include <iostream>
#include <cstdlib>
#include "common.h"
using namespace std;
/* 
采用邻接表存储的无向图，设计算法判断任意两点之间是否存在长度为k的简单路径
 */
int visited[50];
//判断邻接表方式存储的有向图G的顶点i到j是否存在长度为k的简单路径
int PathLenK(ALGraph G, int i, int j, int k)
{
    ArcNode *p;
    int v;
    //找到了一条路径，且长度符合要求
    if (i == j && k == 0)
    {
        return 1;
    }
    else if (k > 0)
    {
        visited[i] = true;
        for (p = G.vertices[i].first; p; p = p->next)
        {
            //从结点i开始遍历，P为i的边链表的第一个边结点
            v = p->adjvex;
            if (!visited[v])
                //v未被访问过

                // 递归继续判断1到了，且剩余路径长度减1
                if (PathLenK(G, v, j, k - 1))
                    return 1;
        }
        visited[i] = false;
        //允许曾经被访问过的结点出现在另一条路径中
    }
    //没找到
    return 0;
}
int main(int argc, char const *argv[])
{
    ALGraph G;
    create(&G);
    return 0;
}
